﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Xml.Linq;
using System.Globalization;
using System.Text.RegularExpressions;
using System.Threading;
using System.Speech.Recognition;

namespace MBO_PIM
{
    /// <summary>
    /// Interaktionslogik für NeuerTermin.xaml
    /// </summary>
    public partial class NeuerTermin : Window
    {
        private Sprachausgabe voiceOutput;
        private MainWindow mainWindow;

        public NeuerTermin(DateTime datum, MainWindow window)
        {
            InitializeComponent();

            mainWindow = window;

            // übergebenes Datum wird an DatePicker übergeben
            datePicker.SelectedDate = datum;
            kategorie.SelectedIndex = 0;
            stunden.MaxLength = 2;
            minuten.MaxLength = 2;

            // Spracheingabe
            SpeechRecognitionEngine recognizer = mainWindow.recognizer;

            recognizer.SpeechRecognized += (s, e1) =>
            {

                string text = e1.Result.Text;
                Console.WriteLine("Spracheingabe: " + text);

                if (text.Equals("speichern"))
                {
                    if (this.IsActive) terminAnlegen1();
                }
                if (text.Equals("abbrechen"))
                {
                    if (this.IsActive) abbrechen1();
                }
            };
        }

        private void terminAnlegen_Click(object sender, RoutedEventArgs e)
        {
            terminAnlegen1();
        }


        private void abbrechen_Click(object sender, RoutedEventArgs e)
        {
            abbrechen1();
        }



        public void terminAnlegen1(){

             if (String.IsNullOrEmpty(titel.Text)) MessageBox.Show("Bitte den Titel angeben.", "Fehler", MessageBoxButton.OK, MessageBoxImage.Exclamation);
            else if (String.IsNullOrEmpty(stunden.Text) || String.IsNullOrEmpty(minuten.Text)) MessageBox.Show("Bitte die Zeit angeben.", "Fehler", MessageBoxButton.OK, MessageBoxImage.Exclamation);
            else
            {
                // Daten auslesen (Datum, Uhrzeit, Kategorie)
                DateTime datum1 = DateTime.Parse(datePicker.SelectedDate.ToString());
                try
                {
                    int stunden1 = int.Parse(stunden.Text);
                    int minuten1 = int.Parse(minuten.Text);
                }
                catch (System.FormatException) { };

                String uhrzeit1 = stunden.Text + ":" + minuten.Text;
                String kategorie1 = "";
                if (kategorie.SelectedIndex == 0) kategorie1 = "Privat";
                if (kategorie.SelectedIndex == 1) kategorie1 = "Oeffentlich";

                if (!IsValidTime(uhrzeit1)) MessageBox.Show("Uhrzeit ungültig!",
		            "Fehler",
		            MessageBoxButton.OK,
		            MessageBoxImage.Exclamation);
                else
                {
                    // XML-Datei laden
                    XDocument termine = XDocument.Load("..\\..\\datenbank.xml");

                    // neues XML-Element anlegen
                    XElement elem = new XElement("Termin",
                                    new XElement("Titel", titel.Text),
                                    new XElement("Datum", datum1.ToShortDateString()),
                                    new XElement("DatumString", datum1.ToString()),
                                    new XElement("Uhrzeit", uhrzeit1),
                                    new XElement("Kategorie", kategorie1),
                                    new XElement("Ort", ort.Text),
                                    new XElement("Beschreibung", beschreibung.Text)
                    );

                    // XML-Element in XML-Datei schreiben
                    termine.Root.Add(elem);

                    // XML-Datei abspeichern
                    termine.Save("..\\..\\datenbank.xml");

                    // Sprachausgabe
                    Thread thread = new Thread(new ParameterizedThreadStart(voiceOutput.SayString));
                    thread.Start("Date " + titel.Text + "has been saved.");

                    MessageBox.Show("Termin wurde gespeichert.");

                    // Fenster schließen
                    this.Close();
                }
            }
        }

        private void abbrechen1()
        {
            // Fenster schließen und in die Terminübersicht wechseln
            this.Close();
            mainWindow.Show();
        }

        public bool IsValidTime(string thetime)
        {
            Regex checktime =
                new Regex("^(?:[01]?[0-9]|2[0-3]):[0-5][0-9]$");

            return checktime.IsMatch(thetime);
        }


    }
}